/**
 *   Licensed to the Apache Software Foundation (ASF) under one
 *   or more contributor license agreements.  See the NOTICE file
 *   distributed with this work for additional information
 *   regarding copyright ownership.  The ASF licenses this file
 *   to you under the Apache License, Version 2.0 (the
 *   "License"); you may not use this file except in compliance
 *   with the License.  You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */
package com.qlangtech.tis.solrdao;

import java.util.ArrayList;
import java.util.List;
//import org.apache.solr.client.solrj.SolrQuery;

/**
 * @author 百岁（baisui@qlangtech.com）
 * @date 2013-6-7
 */
public class AppCriteria {

//    private final SolrQuery solrQuery;

    private List<Criteria> oredCriteria;

//    public AppCriteria(SolrQuery solrQuery) {
//        super();
//        this.solrQuery = solrQuery;
//    // this.oredCriteria = new ArrayList<Criteria>();
//    }
//
//    public AppCriteria() {
//       // this(new SolrQuery());
//    }

    public Criteria createCriteria() {
        Criteria c = null;
        if (oredCriteria == null) {
            oredCriteria = new ArrayList<Criteria>();
            c = new Criteria();
            oredCriteria.add(c);
        } else {
            c = new Criteria();
        }
        return c;
    }

    public void or(Criteria criteria) {
        if (oredCriteria == null) {
            throw new IllegalStateException("oredCriteria can not be null");
        }
        oredCriteria.add(criteria);
    }

    public static class Criteria {

        private final StringBuffer criteria;

        private boolean addParam = false;

        public Criteria() {
            super();
            this.criteria = new StringBuffer("(");
        }

        public Criteria andIdEqualTo(Integer value) {
            appendAND();
            criteria.append("id:").append(value);
            return this;
        }

        public Criteria andIdBetween(Integer value1, Integer value2) {
            appendAND();
            criteria.append("id:[ " + value1 + " TO " + value2 + " ]");
            return this;
        }

        private void appendAND() {
            if (addParam) {
                criteria.append("AND ");
            }
            addParam = true;
        }

        public String toSolrQuery() {
            return criteria.append(")").toString();
        }
    }
}
